import { baseRequestClient, requestClient } from '#/api/request';

export namespace AuthApi {
  /** 登录接口参数 */
  export interface LoginParams {
    password?: string;
    username?: string;
  }

  /** 登录接口返回值 */
  export interface LoginResult {
    data: {
      accessToken: string; // 后端返回的 JWT token
      code: number; // 后端返回的code
      message: string; // 登录成功的消息
      redirectUrl: string; // 登录成功后的跳转路径
      status: number; // 状态码
      username: string; // 登录的用户名
    };
  }

  export interface RefreshTokenResult {
    data: string;
    status: number;
  }
}

/**
 * 登录接口
 * @param data 登录所需参数（用户名和密码）
 * @returns 包含 accessToken 的对象
 */
export async function loginApi(data: AuthApi.LoginParams) {
  // 调用后端登录接口，传入用户登录信息
  const response = await requestClient.post('/auth/login', data);

  // 从返回结果中解构 accessToken
  const accessToken = response.accessToken || '';

  // 如果未返回 accessToken，则抛出错误，提示后端接口问题
  if (!accessToken) {
    throw new Error('登录接口未返回 accessToken');
  }

  // 返回 accessToken
  return response;
}

/**
 * 刷新accessToken
 */
export async function refreshTokenApi() {
  return baseRequestClient.post<AuthApi.RefreshTokenResult>('/auth/refresh', {
    withCredentials: true,
  });
}

/**
 * 退出登录
 */
export async function logoutApi() {
  return baseRequestClient.post('/auth/logout', {
    withCredentials: true,
  });
}

/**
 * 获取用户权限码
 */
export async function getAccessCodesApi() {
  return requestClient.get<string[]>('/query/codes');
}
